package com.swa99ylum.pxf.util;

import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFCell;

public class CellUtils {
	
	/**
	 * 判断：任意 2 个 cell 的值 是否相同
	 */
	@SuppressWarnings("deprecation")
	public static boolean equals(XSSFCell cell1, XSSFCell cell2, List<Object> exclusionList) {
		
		
		if(cell1.getCellType() == cell2.getCellType()) {
			switch (cell1.getCellTypeEnum()) {
			
			case STRING:
				String v1_STRING = cell1.getStringCellValue();
				String v2_STRING = cell2.getStringCellValue();
				
				if(!exclusionList.contains(v1_STRING) && v1_STRING.equals(v2_STRING)) return true;
				else 							return false;
				
			case NUMERIC:
				/* 日期类型 的 单元格 也满足 CellType==NUMERIC
				 * 官方文档：Numeric cell type (whole numbers, fractional numbers, dates)
				 * 
				 * 但是我们这里 仍旧用 getNumericCellValue() 来 提取，而不是  getDateCellValue()
				 */
				double v1_NUMERIC = cell1.getNumericCellValue();
				double v2_NUMERIC = cell2.getNumericCellValue();
				
				//System.out.println("==> " + cellTL1.getCellStyle().getDataFormatString());
				//System.out.println(cellTL1.getCellStyle().getDataFormat());
				//System.out.println(cellTL2.getCellStyle().getDataFormat());
				
				//System.out.println(v1_NUMERIC + " - " + v2_NUMERIC);
				
				if(!exclusionList.contains(v1_NUMERIC) && v1_NUMERIC == v2_NUMERIC)	return true;
				else 							return false;
				
				//TODO：日期类型 怎么比较啊？？？
				
			case BOOLEAN:
				
				boolean v1_BOOLEAN = cell1.getBooleanCellValue();
				boolean v2_BOOLEAN = cell2.getBooleanCellValue();
				
				if(!exclusionList.contains(v2_BOOLEAN) && v1_BOOLEAN == v2_BOOLEAN)	return true;
				else 							return false;
				
			case FORMULA: // 公式
				return false;
				
			case ERROR:
				return false;
				
			case BLANK: // 空值
				return true;

			default:
				return false;
			}
		}
		
		return false;
	}
	
	/**
	 * 判断：任意 2 个 cell 的值 是否相同
	 */
	@SuppressWarnings("deprecation")
	public static boolean equals(XSSFCell cell1, XSSFCell cell2) {
		
		
		if(cell1.getCellType() == cell2.getCellType()) {
			switch (cell1.getCellTypeEnum()) {
			
			case STRING:
				String v1_STRING = cell1.getStringCellValue();
				String v2_STRING = cell2.getStringCellValue();
				
				if(v1_STRING.equals(v2_STRING)) return true;
				else 							return false;
				
			case NUMERIC:
				/* 日期类型 的 单元格 也满足 CellType==NUMERIC
				 * 官方文档：Numeric cell type (whole numbers, fractional numbers, dates)
				 * 
				 * 但是我们这里 仍旧用 getNumericCellValue() 来 提取，而不是  getDateCellValue()
				 */
				double v1_NUMERIC = cell1.getNumericCellValue();
				double v2_NUMERIC = cell2.getNumericCellValue();
				
				//System.out.println("==> " + cellTL1.getCellStyle().getDataFormatString());
				//System.out.println(cellTL1.getCellStyle().getDataFormat());
				//System.out.println(cellTL2.getCellStyle().getDataFormat());
				
				//System.out.println(v1_NUMERIC + " - " + v2_NUMERIC);
				
				if(v1_NUMERIC == v2_NUMERIC)	return true;
				else 							return false;
				
				//TODO：日期类型 怎么比较啊？？？
				
			case BOOLEAN:
				
				boolean v1_BOOLEAN = cell1.getBooleanCellValue();
				boolean v2_BOOLEAN = cell2.getBooleanCellValue();
				
				if(v1_BOOLEAN == v2_BOOLEAN)	return true;
				else 							return false;
				
			case FORMULA: // 公式
				return false;
				
			case ERROR:
				return false;
				
			case BLANK: // 空值
				return true;

			default:
				return false;
			}
		}
		
		return false;
	}
	
	
}
